package keter.ssh.cli;

import java.util.List;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.CommandLineParser;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.ParseException;
import org.apache.commons.lang3.Validate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import keter.ssh.core.SshUtil;
import keter.ssh.exec.Executor;

public class Parser {
	/**
	* Logger for this class
	*/
	private static final Logger logger = LoggerFactory.getLogger(Parser.class);
	
	static CommandOptions cmder = new CommandOptions();
	static CommandLineParser parser = new DefaultParser(); 	
	private static CommandLine cmd;
	private static String args[];
	
	/**
	 * 命令解析初始化
	 * @param args
	 * @throws ParseException 
	 * @author gulixing@msn.com
	 * @date   2016年7月27日
	 */
	public static void init(String args[]) throws ParseException{
		Parser.args = args;
		cmd = parser.parse(cmder.getOptions(), args); 
	}
	
	/**
	 * 参数解析+执行命令
	 * @param args
	 * @param cmd
	 * @throws InterruptedException 
	 * @author gulixing@msn.com
	 * @date   2016年7月27日
	 */
	public static void praseAndExec(List<SshUtil> sshList) throws InterruptedException {
		Validate.notNull(cmd);
		Validate.notNull(args);
		if(cmd.hasOption("h")) { 
			   // 这里显示简短的帮助信息
			   System.out.println("使用说明： \n");
			   System.out.println("1、 ssh-bach ");
			   System.out.println("2、 ssh-bach -g|-p [源文件] [目标文件] ");
			   System.out.println(" -g,get  src <dest>     文件下载, 远程文件URI 本地目录");
			   System.out.println(" -p,put  src <dest>     文件上传, 本地文件URI 远程目录");
			   System.exit(0);
		}
		
		//只有一个参数:直接执行命令
		else if(args.length==1) { 
			logger.info("执行命令:{}",args[0]);
			Executor.execute(sshList,args[0]);
		}
		
		else if(cmd.hasOption("g")) { 
			String[] params = cmd.getOptionValues("g"); 
			String src = params[0];
			if(params.length==1){//省略目标参数
				Executor.download(sshList,src);
			}
			else{
				Executor.download(sshList,src, params[1]);
			}
		}
		
		else if(cmd.hasOption("p")) { 
			String[] params = cmd.getOptionValues("p"); 
			String src = params[0];
			if(params.length==1){//省略目标参数
				Executor.upload(sshList,src);
			}
			else{
				Executor.upload(sshList,src, params[1]);
			}
		}
		else {
			System.out.println("不支持的命令!");
		}
	}

}
